This page has been superceded by a wiki version of this example: StatisticsExample
/*
File: stat.d
Author: Justin C. Calvarese
Website: http://jcc_7.tripod.com/d/
License: Public Domain
Linear regression statistics.
*/
double average(double[] r)
{
double t = 0;
for(int i=0; i < r.length; i++)
t += r[i];
return (t / (cast(double) r.length));
}
double beta1(double[] x, double[] y, double x_bar, double y_bar)
{
int l;
if (x.length != y.length)
{
printf("x and y really should be the same length!");
// Set length as the shorter series and move on...
if(x.length < y.length) l = x.length;
else l = y.length;
}
else l = x.length;
double top_sum, btm_sum;
top_sum = 0;
for(int i = 0; i < l; i++)
top_sum += (x[i] - x_bar) * (y[i] - y_bar);
btm_sum = 0;
for(int i = 0; i < l; i++)
btm_sum += ((x[i] - x_bar) * (x[i] - x_bar));
return top_sum / btm_sum;
}
double beta0(double x_bar, double y_bar, double b1)
{
return y_bar - (b1 * x_bar);
}
int main()
{
double[] x;
x.length = 10;
x[0] = 1;
x[1] = 2;
x[2] = 3;
x[3] = 4;
x[4] = 5;
x[5] = 6.5;
x[6] = 7;
x[7] = 7.5;
x[8] = 8;
x[9] = 8.5 ;
double[] y;
y.length = 10;
y[0] = 1;
y[1] = 2;
y[2] = 3;
y[3] = 3.2;
y[4] = 3.4;
y[5] = 4;
y[6] = 4.2;
y[7] = 4.3;
y[8] = 4.35;
y[9] = 4.37;
double x_bar, y_bar;
x_bar = average(x);
y_bar = average(y);
double b1, b0;
b1 = beta1(x, y, x_bar, y_bar);
b0 = beta0(x_bar, y_bar, b1);
printf("b1: %f\n", b1);
printf("b0: %f\n", b0);
return 0;
}